这里就不介绍生产者消费者模型了,不懂的就看回进程中的生产者消费者模型

  • 使用线程实现生产者消费者模型 -> 线程中没有 JoinableQueue 队列,所以只能通过标识解决不平衡问题

import time
from queue import Queue
from threading import Thread


# 生产者
def producer():
    for i in range(50):
        q.put('%s.包子' % i)  # 直接调用外部的变量, 因为一个进程中的多个线程是可以直接使用这个进程中的数据,且一个py文件就相当于一个进程,不按照线程的说法: 函数本来就可以调用外部的变量和方法,因为作用域链

# 如果有3个消费进程,那么就要往队列添加3个标识数据

    q.put(None)  # 当生产完数据后再向队列中添加多一个标识数据
    q.put(None)  # 当生产完数据后再向队列中添加多一个标识数据


# 消费者
def consumer():
    while True:
        time.sleep(0.5)
        bun = q.get()  # 直接调用外部的变量, 因为一个进程中的多个线程是可以直接使用这个进程中的数据,且一个py文件就相当于一个进程,不按照线程的说法: 函数本来就可以调用外部的变量和方法,因为作用域链
        if bun is None:  # 判断拿到的数据是不是等于标识数据,如果等于就说明消费者已经获取完所有生产者的数据,可以结束循环
            break
        else:
            print('吃了%s' % bun)


q = Queue()

# 生产者线程
p = Thread(target=producer)
p.start()

# 消费者线程
c1 = Thread(target=consumer)
c2 = Thread(target=consumer)
c1.start()
c2.start()